//package com.gyt.manager.common.utils.doc;
//
//import com.aspose.words.Document;
//import com.aspose.words.License;
//import com.aspose.words.SaveFormat;
//import com.gyt.manager.common.constant.PathConstant;
//import com.lowagie.text.DocumentException;
//import com.lowagie.text.pdf.BaseFont;
//import freemarker.template.*;
//import org.apache.commons.lang3.StringUtils;
//import org.apache.poi.ss.usermodel.Cell;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.core.io.ClassPathResource;
//import org.springframework.core.io.Resource;
//import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
//import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
//import org.thymeleaf.util.MapUtils;
//import org.xhtmlrenderer.pdf.ITextFontResolver;
//import org.xhtmlrenderer.pdf.ITextRenderer;
//import sun.misc.BASE64Encoder;
//
//import javax.xml.parsers.DocumentBuilder;
//import javax.xml.parsers.DocumentBuilderFactory;
//import java.io.*;
//import java.util.Locale;
//import java.util.Map;
//
///**
// * @author v_yantgao
// */
//public class DocUtil {
//
//    private static Logger logger = LoggerFactory.getLogger(DocUtil.class);
//
//    public static final String encoding = "UTF-8";
//
//    private static Configuration cfg = new Configuration(new Version("2.3.23"));
//
//    //初始化
//    static {
//        //1.设置模板所在文件夹
//        cfg.setClassForTemplateLoading(DocUtil.class, "/config/templates");
//        //2.设置国家及其编码，避免ftl文档中的中文在生成html时出现乱码
//        cfg.setEncoding(Locale.getDefault(), encoding);
//        //3.设置对象的包装器
//        cfg.setObjectWrapper(new DefaultObjectWrapper(new Version("2.3.23")));
//        //4.设置异常处理器,${a.b.c.d}即使没有属性也不会出错
//        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
//    }
//
//    /**
//     * 获取目标文件的模板
//     * @param inputFileName
//     * @return
//     */
//    public static Template getTemplate(String inputFileName) throws IOException {
//        return cfg.getTemplate(inputFileName, encoding);
//    }
//
//    /**
//     * 生成模板字符串
//     * @param templateName
//     * @param param
//     * @return
//     */
//    public static String templateToString(String templateName, Map<String, Object> param){
//        if (MapUtils.isEmpty(param)) {
//            return StringUtils.EMPTY;
//        }
//        try {
//            Template template = getTemplate(templateName);
//            return FreeMarkerTemplateUtils.processTemplateIntoString(template, param);
//        } catch (Exception e) {
//            logger.error("parse template error-->", e);
//        }
//        return StringUtils.EMPTY;
//
//    }
//    /**
//     * 生成word文档
//     * 根据原始word文档，转对应的xml文档，再制作对应ftl
//     * @param data
//     * @param inputFileName
//     * @param outFileName
//     * @return
//     */
//    public static File getDocFile(Map<String, Object> data, String inputFileName, String outFileName){
//
//        Writer out = null;
//        File outFile = new File(outFileName);
//        try {
//            Template template = getTemplate(inputFileName);
//            out = new OutputStreamWriter(new FileOutputStream(outFile), encoding);
//            //处理模板
//            template.process(data, out);
//        } catch (IOException e) {
//            logger.error("get templates file fail:{}", e.getMessage(), e);
//        } catch (TemplateException e) {
//            logger.error("generate result file fail:{}", e.getMessage(), e);
//        } finally {
//            try {
//                if (out != null){
//                    out.close();
//                }
//            } catch (IOException e) {
//                logger.error("closed write stream fail:{}", e.getMessage(), e);
//            }
//        }
//        return outFile;
//    }
//
//    /**
//     * 获取图片的base64码
//     * @param src
//     * @return
//     * @throws IOException
//     */
//    public static String getImageBase(String src) throws IOException {
//        if (StringUtils.isBlank(src)) {
//            return "";
//        }
//        File file = new File(src);
//        if (!file.exists()) {
//            return "";
//        }
//        FileInputStream inputStream = new FileInputStream(file);
//        byte[] data = new byte[inputStream.available()];
//        inputStream.read(data);
//        inputStream.close();
//
//        BASE64Encoder encoder = new BASE64Encoder();
//        return encoder.encode(data);
//    }
//
//    /**
//     * 设置license
//     * @return
//     */
//    public static boolean getLicense(){
//        boolean result = false;
//        //InputStream inputStream = DocUtil.class.getClassLoader().getResourceAsStream("/config/templates/license.xml");
//        Resource resource = new ClassPathResource(PathConstant.licensePath);
//        License license = new License();
//        try {
//            license.setLicense(resource.getInputStream());
//            result = true;
//        } catch (Exception e) {
//            logger.error("set license error:{}", e.getMessage(), e);
//        }
//        return result;
//    }
//
//    /**
//     * word转pdf
//     * @param inFileName
//     * @param outFileName
//     * @return
//     */
//    public static File doc2pdf(String inFileName, String outFileName){
//        boolean license = getLicense();
//        if (!license){
//            logger.error("get license fail");
//        }
//        //新建空白pdf文档
//        File outFile = new File(outFileName);
//        FileOutputStream outputStream = null;
//        try {
//            outputStream = new FileOutputStream(outFile);
//            Document document = new Document(inFileName);
//            // 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
//            document.save(outputStream, SaveFormat.PDF);
//        } catch (Exception e) {
//            logger.error("templates file transfer fail:{}", e.getMessage(), e);
//        } finally {
//            if (outputStream != null){
//                try {
//                    outputStream.flush();
//                    outputStream.close();
//                } catch (IOException e) {
//                    logger.error("closed outputStream exception:{}", e.getMessage(), e);
//                }
//            }
//        }
//        return outFile;
//    }
//
//    /**
//     *  生成pdf文档
//     *  1.根据word文档，制作对应的html文档
//     *  2.由于xhtmlrenderer对格式要求较高，必须标准的html,否则报错
//     *  3.再由html-ftl即可
//     * @param data
//     * @param inputFileName
//     * @param outFileName
//     * @return
//     */
//    public static File getPdfFile(Map<String, Object> data, String inputFileName, String outFileName) throws DocumentException {
//
//        File outFile = new File(outFileName);
//        FileOutputStream outputStream = null;
//        BufferedWriter writer = null;
//        try {
//            StringWriter stringWriter = new StringWriter();
//            writer = new BufferedWriter(stringWriter);
//            Template template = getTemplate(inputFileName);
//            template.process(data, writer);
//            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
//            ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(stringWriter.toString().getBytes(encoding));
//            org.w3c.dom.Document document = builder.parse(arrayInputStream);
//
//            //中文支持
//            ITextRenderer renderer = new ITextRenderer();
//            ITextFontResolver fontResolver = renderer.getFontResolver();
//            fontResolver.addFont("/config/pdf/arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//            fontResolver.addFont("/config/pdf/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//            fontResolver.addFont("/config/pdf/MSYH.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//
//            renderer.setDocument(document, null);
//            renderer.layout();
//            outputStream = new FileOutputStream(outFile);
//            renderer.createPDF(outputStream);
//            outputStream.flush();
//        } catch (Exception e) {
//            logger.error("exception:{}", e.getMessage(), e);
//        } finally {
//            try {
//                if (outputStream != null) {
//                    outputStream.close();
//                }
//                if (writer != null) {
//                    writer.close();
//                }
//            } catch (Exception e) {
//                logger.error("closed stream exception:{}", e.getMessage(), e);
//            }
//        }
//        return outFile;
//    }
//
//    public static String getCellValue(Cell cell){
//        if (null == cell) {
//            return StringUtils.EMPTY;
//        }
//        return cell.getStringCellValue();
//    }
//}
